//http://api.map.baidu.com/geocoder/v2/?ak=E4805d16520de693a3fe707cdc962045&callback=renderReverse&location=39.983424,116.322987&output=json&pois=1
//如何申请百度地图API密匙    http://jingyan.baidu.com/article/363872eccda8286e4aa16f4e.html

function getGpsCity(lat, lng) {
	var ak = window.g_baidu_map_ak || "E4805d16520de693a3fe707cdc962045";
	var url = "http://api.map.baidu.com/geocoder/v2/";
	// url = "json/gps.json";
	var queryData = {
		"ak" : ak
		// "callback" : "renderReverse",
		,
		"location" : lat + "," + lng,
		"output" : "json",
		"pois" : "1"
	};

	$.ajax({
		"async" : false,
		"url" : url,
		"type" : "GET",
		"dataType" : 'jsonp',
		"jsonp" : 'callback',
		"jsonpCallback" : 'renderReverse',
		"data" : queryData,
		"timeout" : 3000,
		"beforeSend" : function() {
			// jsonp 方式此方法不被触发.原因可能是dataType如果指定为jsonp的话,就已经不是ajax事件了
		},
		"success" : function(json) {// 客户端jquery预先定义好的callback函数,成功获取跨域服务器上的json数据后,会动态执行这个callback函数
			console.log(json);
			// showAlert("success");
			// var html = JSON.stringify(json);
			// showAlert(html);
			// if (json.actionErrors.length != 0) {
			// showAlert(json.actionErrors);
			// }
			// genDynamicContent(qsData, type, json);
		},
		"complete" : function(XMLHttpRequest, textStatus) {
			// $.unblockUI({ fadeOut: 10 });
			// showAlert("complete");
		},
		"error" : function(xhr) {
			// jsonp 方式此方法不被触发.原因可能是dataType如果指定为jsonp的话,就已经不是ajax事件了
			// 请求出错处理
			// showAlert("请求出错(请检查相关度网络状况.)");
		}
	});

}

function genDynamicContent(qsData, type, json) {
	// showAlert(json);
}
function renderReverse(json) {
	showAlert("renderReverse");
	// showAlert(json);
	var html = JSON.stringify(json);
	showAlert(html);
	// showAlert(json.status);
	if (json.status != 0)
		return;

	json = json.result;
	var location = json.location;
	var lat = location.lat;
	var lng = location.lng;
	// showAlert(lat + "," + lng);
	var city = json.addressComponent.city;
	var district = json.addressComponent.district;
	// showAlert(city + "," + district);
	if (city.indexOf("市") > 0)
		city = city.substring(0, city.length - 1);
	showAlert("城市名："+ city);

	if (city && city.length) {
		$("#autocompleteInput").val(city);
		showAlert("获取位置成功");
		
		//保存
		CacheUtil.set("last_gps_city", {"lat":lat, "lng":lng, "city":city, "time": new Date().getTime() });
		
	} else {
		showAlert("获取位置或城市名不成功!");
	}
}

function startGetLocationAndCity() {
	
	var last = CacheUtil.get("last_gps_city");
	//console.log(new Date().getTime()-last.time);
	
	if( last && last.city 
			&& new Date().getTime()-last.time < window.g_gps_city_cache_second*1000){

		$("#autocompleteInput").val(last.city);
		console.log("刚刚获得的城市");
		showAlert("获取位置成功");
		return;
	}
		
	

	// http://www.cnblogs.com/lhb25/archive/2012/07/10/html5-geolocation-api-demo.html
	if (navigator.geolocation) {
		navigator.geolocation.getCurrentPosition(locationSuccess,
				locationError, {
					// 指示浏览器获取高精度的位置，默认为false
					enableHighAcuracy : true,
					// 指定获取地理位置的超时时间，默认不限时，单位为毫秒
					timeout : 3000,
					// 最长有效期，在重复获取地理位置时，此参数指定多久再次获取位置。
					maximumAge : 3000
				});
	} else {
		showAlert("不支持GPS位置!");
	}
}

function locationSuccess(position) {
	if (!position)
		return;

	console.log(position);
	var coords = position.coords;
	var lat = coords.latitude;
	var lng = coords.longitude;

	showAlert("获得经纬度:" + lat + "," + lng);
	
	var last = CacheUtil.get("last_gps_city");
	if( last && last.city 
			&& Math.abs(lat-last.lat) < window.g_gps_city_cache_km*0.01
			&& Math.abs(lng-last.lng) < window.g_gps_city_cache_km*0.01
			){

		$("#autocompleteInput").val(last.city);
		console.log("最后一次的城市");
		showAlert("获取位置成功");
		return;
	}


	getGpsCity(lat, lng);

}

function locationError(error) {
	switch (error.code) {
	case error.TIMEOUT:
		showError("超时! ");
		break;
	case error.POSITION_UNAVAILABLE:
		showError('无法获取GPS位置!');
		break;
	case error.PERMISSION_DENIED:
		showError('请允许gps位置.');
		break;
	case error.UNKNOWN_ERROR:
		showError('获取位置时出现错误！');
		break;
	}
}

function showError(msg) {
	$("#lblGpsInfo").addClass("has-error");
	$("#lblGpsInfo").html(msg);
}

function showAlert(msg) {
	$("#lblGpsInfo").addClass("has-warning");
	$("#lblGpsInfo").html(msg);

}


var CacheUtil = {
		set : function(key, val) {
			if (!key || !key.length)
				return false;

			localStorage.setItem(key, JSON.stringify(val));
			return true
		},
		get : function(key) {
			if (!key || !key.length) return null;
			var val = localStorage.getItem(key);
			if (!val || !val.length) return null;
			return JSON.parse(val);
		}
};


var vrv = vrv || {};
vrv.gps = {
		
	init: function(opt){
		var callFn = function(){};
		
		if (typeof opt === 'function'){
			callFn = opt;
		}
		
		this.getCityName(callFn);
	},
	
	
	getCityName: function(callFn){
		var myCity = new BMap.LocalCity();
		myCity.get(callFn);
		
	}
}


/*function each(obj,callback){
	for(var i=0,l = obj.length;i<l;i++){
		callback.call(this,i,obj[i]); //此处的意思是，用callback来替换obj，所以实现为callback(i,obj[i]),正好将数组遍历;
		
		var e = 0;
	}
}
//为了证明函数的正确性，我们做如下测试

var json = [6,5,3,2,8,4];

each(json,function(i,n){
    console.log(i+"----------"+n);
});
*/